# -*- coding: utf-8 -*-
# time: 2025/4/9 14:01
# file: his01.py
# author: hanson
"""
LangChain通过Memory工具类为Agent和Chain提供了记忆功能，让智能应用能够记住前一次的交互，比如在聊天环境中这一点尤为重要。

Chat Message History（聊天消息历史）
最常见的一种对话内容中的Memory类，这就好比是在你的乐高角色之间建立了一个记忆网络，使它们能够记住过去的对话，
这样每次交流都能在之前的基础上继续，使得智能积木人能够在每次对话中保持连贯性。
案例：
结合LLM链使用
"""
from langchain.chains.llm import LLMChain
from langchain_core.messages import HumanMessage, AIMessage
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_ollama import ChatOllama
# qwen2_5_chain_demo.py
# Python 3.10
from langchain_ollama import ChatOllama
from langchain_core.prompts import PromptTemplate
from langchain.chains import LLMChain

# 初始化模型 (需提前通过 `ollama pull qwen2.5:1.5b` 下载模型)
model_name = "qwen2.5:0.5b"
#model_name = r"E:\soft\model\qwen\Qwen\Qwen2.5-0.5B-Instruct"
llm = ChatOllama(
    model=model_name,  # 模型标识符需与 Ollama 仓库一致
    temperature=0.3,        # 控制生成随机性
    #max_tokens=512,         # 限制输出长度
    stop=["<|im_end|>"]     # 停止标记
)

# 构建 Qwen2.5 专用 Prompt 模板
template = """<|im_start|>user
{question}<|im_end|>
<|im_start|>assistant
"""
prompt = PromptTemplate.from_template(template)

# 创建 LLMChain
chain = LLMChain(llm=llm, prompt=prompt)

# 测试问答
question = "四肢抽搐，眼直视，这个有几年了，之前也去过不少医院治疗了，治疗后不吃饭请问：怎样治疗，这种病能否根治？"
response = chain.invoke({"question": question})

# 清理输出结果
print(response["text"])
# 对分割后的每个元素执行 strip()
# cleaned_parts = [part.strip() for part in response["text"].split("<|im_end|>")]
# cleaned_response = " ".join(cleaned_parts)  # 重新拼接为字符串‌:ml-citation{ref="1,7" data="citationList"}
# print(cleaned_response)
